#pragma once
template <unsigned n>
class Factorial
{
public:
	enum { value = n * Factorial<n-1>::value };
};

template <>
class Factorial<0>
{
public:
	enum { value = 1 };
};